An integrated circuit (IC) has a large number of electronic components, such as transistors, logic gates, diodes, and wires that are fabricated by forming layers of different materials and of different geometric shapes on various regions of a silicon wafer.
Many phases of physical design may be performed with computer aided design (CAD) tools or electronic design automation (EDA) systems. To design an integrated circuit, a designer first creates high level behavior descriptions of the IC device using a high-level hardware design language. An EDA system typically receives the high level behavior descriptions of the IC device and translates this high-level design language into netlists of various levels of abstraction using a computer synthesis process. A netlist describes interconnections of nodes and components on the chip and includes information of circuit primitives, such as for example, transistors and diodes, their sizes and interconnections. An integrated circuit designer may use a set of layout EDA application programs to create a physical design of the IC from the logical design. The layout EDA application uses geometric shapes of different materials to create the various electrical components on an integrated circuit and to represent electronic and circuit IC components as geometric objects with varying shapes and sizes. The geometric information about the placement of the nodes and components onto the chip may be determined by a placement process and a routing process. The placement process is a process for placing electronic components or circuit blocks on the chip and the routing process is the process for creating interconnections between the blocks and components according to the specified netlist. After an integrated circuit designer has created an initial integrated circuit layout, the designer then verifies and optimizes the integrated circuit layout using a set of EDA testing and analysis tools. Verification may include, for example, design rule checking to verify compliance with rules established for various IC parameters.
The electronic design data is often stored in a “stream” format, which is a database file format that serially stores information about the different components and objects that are in the electronic design. GDSII (“Graphic Data System II”) is a common stream format that has become a standard file format for storing layout information for electronic designs, which is structured as a binary file comprising geometric shapes, labels, and other information about the layout in hierarchical form. The data from the stream format, stream file or stream data (collectively referred to herein as either “stream file” or “stream data”), can be used to reconstruct all or part of the artwork to be used in sharing layouts, transferring artwork between different tools, or creating photomasks. Another common stream format for holding electronic designs is the OASIS (“Open Artwork System Interchange Standard”) format, which is a binary format that provides an instruction set used to represent and express cell and chip level physical and mask layout data. The data within these stream-based formats is generally represented and organized on a cell-by-cell basis, with hierarchical references to other cells.
EDA tools often need to access the electronic design data that is stored in the stream-based formats. For example the process of performing design verification, modification, or review will require the ability to read the data that is stored in the GDSII or OASIS files. Many EDA tools implement data access by utilizing reading modules or tools that access and populate database structures with the contents of the stream files. An example database that can be used to hold this data is the OpenAccess database, the specifications of which are available from the Silicon Integration Initiative at www.si2.org. Once the database has been populated with the detailed design information, the EDA tool can then perform detailed analysis or visualization using the information in the database. Conventional tools that provide the functionality of reading data from the stream files typically operate very inefficiently. In part, this is because of the time that is required to perform conversion operations and to read the stream data into memory. Moreover, because of the sequential nature of the data for cells in a stream file, it is very difficult to parallelize the operations to read that data.